package cn.iocoder.yudao.module.reading.framework.util;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.module.reading.controller.app.common.vo.PageResult;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;

/**
 * 绘本阅读模块工具类
 *
 * @author 李晨
 */
public class ReadingUtils {

    /**
     * 将 MyBatis Plus 的分页结果转换为通用分页结果
     *
     * @param page MyBatis Plus 分页结果
     * @param <T>  数据类型
     * @return 通用分页结果
     */
    public static <T> PageResult<T> buildPageResult(IPage<T> page) {
        return new PageResult<>(page.getRecords(), page.getTotal(), 
                (int) page.getCurrent(), (int) page.getSize());
    }

    /**
     * 构建分页结果
     *
     * @param list     数据列表
     * @param total    总数
     * @param pageNo   页码
     * @param pageSize 每页大小
     * @param <T>      数据类型
     * @return 分页结果
     */
    public static <T> PageResult<T> buildPageResult(List<T> list, Long total, Integer pageNo, Integer pageSize) {
        return new PageResult<>(list, total, pageNo, pageSize);
    }

    /**
     * 检查字符串是否为空或空白
     *
     * @param str 字符串
     * @return 是否为空
     */
    public static boolean isEmpty(String str) {
        return StrUtil.isBlank(str);
    }

    /**
     * 检查集合是否为空
     *
     * @param collection 集合
     * @return 是否为空
     */
    public static boolean isEmpty(java.util.Collection<?> collection) {
        return CollUtil.isEmpty(collection);
    }

    /**
     * 检查集合是否不为空
     *
     * @param collection 集合
     * @return 是否不为空
     */
    public static boolean isNotEmpty(java.util.Collection<?> collection) {
        return CollUtil.isNotEmpty(collection);
    }

    /**
     * 安全地获取列表中的第一个元素
     *
     * @param list 列表
     * @param <T>  元素类型
     * @return 第一个元素，如果列表为空则返回 null
     */
    public static <T> T getFirst(List<T> list) {
        return CollUtil.getFirst(list);
    }

    /**
     * 计算阅读进度百分比
     *
     * @param currentPage 当前页码
     * @param totalPages  总页数
     * @return 进度百分比 (0.0 - 1.0)
     */
    public static Double calculateProgress(Integer currentPage, Integer totalPages) {
        if (totalPages == null || totalPages <= 0) {
            return 0.0;
        }
        if (currentPage == null || currentPage <= 0) {
            return 0.0;
        }
        if (currentPage >= totalPages) {
            return 1.0;
        }
        return (double) currentPage / totalPages;
    }

    /**
     * 格式化时长（秒）为可读格式
     *
     * @param seconds 秒数
     * @return 格式化后的时长，如 "05:23"
     */
    public static String formatDuration(Integer seconds) {
        if (seconds == null || seconds <= 0) {
            return "00:00";
        }
        int minutes = seconds / 60;
        int remainingSeconds = seconds % 60;
        return String.format("%02d:%02d", minutes, remainingSeconds);
    }

}
